//
//  MainViewController.swift
//  MicroBlog
//
//  Created by 002 on 15/10/14.
//  Copyright © 2015年 002. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {

    // MARK: 视图生命周期方法
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        self.view.backgroundColor = UIColor.whiteColor()
        addAllChildControllers()
    }
    
    override func viewWillAppear(animated: Bool) {
        
        super.viewWillAppear(animated)
        // 创建拽写按钮并添加到tabbar上
        tabBar.addSubview(self.composedBtn)
        
        // 设置按钮
        setupComposedBtn()
        
        // 带到视图顶部
        tabBar.bringSubviewToFront(composedBtn)
    }
    
    // MARK: - 监听方法 - ‘拽写’
    /// 拽写按钮监听方法(@objc作用是可以保证运行循环能够发送此消息，默认对于私有方法不可以访问来发消息)
    @objc private func composedBtnClick() {
    
        var vc : UIViewController
        if UserAccountViewModel.shareUserAccount.isUserLogin {
            vc = ComposeViewController()
        } else {
            vc = OAuthViewController()
        }
        
        let nav = UINavigationController.init(rootViewController: vc)
        
        presentViewController(nav, animated: true, completion: nil)
        print("点击我了")
    }
    
    /// 添加所有的子控制器
    func addAllChildControllers() {
    
        // 首页
        addChildVC(HomeTableViewController(), title: "首页", imageName: "tabbar_home")
        
        // 消息
        addChildVC(MessageTableViewController(), title: "消息", imageName: "tabbar_message_center")
        
        // 拽写
        addChildViewController(UIViewController())
        
        // 发现
        addChildVC(DiscoverTableViewController(), title: "发现", imageName: "tabbar_discover")
        
        // 我
        addChildVC(ProfileTableViewController(), title: "我", imageName: "tabbar_profile")
    }
    
    // 添加子控制器
    func addChildVC(viewController: UIViewController, title :String, imageName: String) {
    
        // 首页控制器
        let homeVC = viewController
        // 通过文字代替图片来渲染颜色可以提升性能（小技巧）(已经在程序入口appdelegate处设置了)
//        tabBar.tintColor = UIColor.orangeColor()
        homeVC.title = title
        homeVC.tabBarItem.image = UIImage.init(named: imageName)
        
        // 以下代码通过图片来渲染颜色，但是由于文字字体属性不知如何设置，所以不完善，目前不可用
//        homeVC.tabBarItem.image = UIImage.originalModeImage("tabbar_home")
//        homeVC.tabBarItem.selectedImage = UIImage.originalModeImage("tabbar_home_highlighted")
//        homeVC.tabBarItem.titleTextAttributesForState(UIControlState.Normal)
        // 导航控制器包装
        let NVC = UINavigationController(rootViewController: homeVC)
        self.addChildViewController(NVC)
    }
    
    /// 懒加载'拽写'按钮
    private lazy var composedBtn : UIButton =  UIButton.init(
        imageName: "tabbar_compose_icon_add",
        backImageName: "tabbar_compose_button")
}

// MARK: - 设置界面（对拽写按钮进行调整）
extension MainViewController {
    
    // 调整按钮
    func setupComposedBtn() {
        
        let count = self.childViewControllers.count
        
        // 让按钮宽一点点，能够解决手指触摸的容错问题
        let w = self.tabBar.bounds.width / CGFloat(count) - 1
        
        // 布局
        composedBtn.frame = CGRectInset(self.tabBar.bounds, 2 * w, 0)
        
        // 添加监听
        composedBtn.addTarget(self, action: "composedBtnClick", forControlEvents: UIControlEvents.TouchUpInside)
    }
}
